stylecontext: Only create transitions conditionally
authorBenjamin Otte <otte@redhat.com>
Mon, 17 Sep 2012 09:30:21 +0000 (11:30 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 17 Sep 2012 18:40:01 +0000 (20:40 +0200)
While regular animations should always be created, transitions should
not. This patch allows to express this by passing NULL as the values to
transition from.

It also adds a gtk_style_context_should_create_transitions() function
that returns TRUE when transitions should be created.

gtk/gtkcsscomputedvalues.c
gtk/gtkstylecontext.c

index 7ec040ea5887c85d8f1afc17f7eb4916c416a64a..cd2f66b2d636e510f6600c6997b5c844727ff59b 100644 (file)
@@ -492,7 +492,8 @@ _gtk_css_computed_values_create_animations (GtkCssComputedValues *values,
                                             GtkCssComputedValues *source,
                                             GtkStyleContext      *context)
 {
-  gtk_css_computed_values_create_css_transitions (values, timestamp, source);
+  if (source != NULL)
+    gtk_css_computed_values_create_css_transitions (values, timestamp, source);
   gtk_css_computed_values_create_css_animations (values, timestamp, context);
 }
 
index e42ac88b125bf45a2daca61770e63273791c17b0..b06d4d868dc4fa35cf8db5027202e122109c299a 100644 (file)
@@ -3077,6 +3077,27 @@ gtk_style_context_needs_full_revalidate (GtkStyleContext  *context,
     return FALSE;
 }
 
+static gboolean
+gtk_style_context_should_create_transitions (GtkStyleContext *context)
+{
+  GtkStyleContextPrivate *priv;
+  gboolean animate;
+
+  priv = context->priv;
+
+  if (priv->widget == NULL)
+    return FALSE;
+
+  if (!gtk_widget_get_mapped (priv->widget))
+    return FALSE;
+
+  g_object_get (gtk_widget_get_settings (context->priv->widget),
+                "gtk-enable-animations", &animate,
+                NULL);
+
+  return animate;
+}
+
 void
 _gtk_style_context_validate (GtkStyleContext  *context,
                              gint64            timestamp,
@@ -3144,7 +3165,7 @@ _gtk_style_context_validate (GtkStyleContext  *context,
 
           _gtk_css_computed_values_create_animations (data->store,
                                                       timestamp,
-                                                      current->store,
+                                                      gtk_style_context_should_create_transitions (context) ? current->store : NULL,
                                                       context);
           if (_gtk_css_computed_values_is_static (data->store))
             change &= ~GTK_CSS_CHANGE_ANIMATE;